// 搭建服务器
const express = require('express');
const app = express();
app.listen(3000, () => console.log('启动了'));


// -------------------------- 配置 + 写接口 --------------------------

// 先解决跨域
const cors = require('cors');
app.use(cors());
// app.use((req, res, next) => {
//   res.setHeader('Access-Control-Allow-Origin', '*');
//   // res.setHeader('Access-Control-Allow-Origin', '*');
//   next();
// })

// 验证客户端的请求，是否携带了Authorization 请求头；值是否是有效的token值
// app.use((req, res, next) => {
//   if (token验证没问题 || 请求的是 / api开头的接口) {
//     // 获取到token中保存的用户数据（我们保存的就是一个用户id）
//     req.user = 3;
//     next();
//   } else {
//     next('身份认证失败！')
//   }
// });
// -------- 使用第三方的 express-jwt 模块完成身份认证 -----------
const jwt = require('express-jwt');
// app.use(jwt({ secret: 'shhhhhhared-secret' }).unless({ path: ['/token'] }));
// app.use(jwt().unless())
app.use(jwt({  // jwt方法的作用解密token；解密成功：1把用户数据（id）赋值给 req.user；2next() 解密失败：next(err)
  secret: 'sadfss22',
  algorithms: ['HS256']
}).unless({ // 控制哪些接口需要认证
  // path: ['/api/login', '/api/reguser']  // 除了这两个接口以外，其他接口都需要认证
  path: /^\/api/  // 以 /api 开头的接口不需要认证
}));

// 配置1：接收查询字符串格式的请求体
app.use(express.urlencoded({ extended: true })) // for parsing application/x-www-form-urlencoded

app.get('/api/test1', (req, res) => {
  console.log(req.query); // { id: '2', name: 'zs' }
  res.send('aaaa')
});

app.get('/api/test2/:id/:name', (req, res) => {
  console.log(req.params); // { id: '100', name: 'lisi' }
  res.send('adsfadsfadf')
})

// 加载自定义的 路由模块
let login = require('./routers/login');
// 注册为中间件
app.use('/api', login);

app.use('/my/user', require('./routers/user'));
app.use('/my/article', require('./routers/article'));
// app.get('/my/abcd', (req, res) => {
//   res.send('hello')
// })




// app.use((err, req, res, next) => {
//   res.send({ status: 1, message: '身份认证失败！' })
// })
app.use(function (err, req, res, next) {
  if (err.name === 'UnauthorizedError') {
    res.status(401).send({ status: 1, message: '身份认证失败！' });
  }
});